namespace Vin.Extension.Framework.Alipay.Models;

public class AlipayNotifyModel
{
    /// <summary>
    /// 通知时间。通知的发送时间。
    /// 格式为 yyyy-MM-dd HH:mm:ss。
    /// 示例：2020-12-27 06:20:30
    /// </summary>
    public DateTime? NotifyTime { get; set; }
    
    /// <summary>
    /// 通知时间。消息发送时的服务端时间
    /// </summary>
    public long? UtcTimestamp { get; set; }

    /// <summary>
    /// 通知类型。
    /// 枚举值：trade_status_sync。
    /// 示例：trade_status_sync
    /// </summary>
    public string? NotifyType { get; set; }
    
    /// <summary>
    /// 消息接口名称
    /// </summary>
    public string? MsgMethod { get; set; }
    
    /// <summary>
    /// 消息接口版本 版本号(1.1版本为标准消息)
    /// </summary>
    public string? Version { get; set; }

    /// <summary>
    /// 通知校验 ID。
    /// 示例：ac05099524730693a8b330c5ecf72da9786
    /// </summary>
    public string? NotifyId { get; set; }

    /// <summary>
    /// 签名类型。商家生成签名字符串所使用的签名算法类型，目前支持 RSA2 和 RSA。
    /// 推荐使用 RSA2。
    /// 示例：RSA2
    /// </summary>
    public string? SignType { get; set; }

    /// <summary>
    /// 签名。用于验证通知数据的真实性。
    /// 示例：601510b7970e52cc63db0f44997cf70e
    /// </summary>
    public string? Sign { get; set; }
    
    /// <summary>
    /// 消息报文
    /// </summary>
    public string? BizContent { get; set; }
    
    /// <summary>
    /// 编码集，该字符集为验签和解密所需要的字符集
    /// </summary>
    public string? Charset { get; set; }

    /// <summary>
    /// 支付宝交易号。
    /// 示例：20213112011001004330000121536
    /// </summary>
    public string? TradeNo { get; set; }

    /// <summary>
    /// 开发者的 app_id。支付宝分配的应用 APPID。
    /// 示例：2014072300007148
    /// </summary>
    public string? AppId { get; set; }

    /// <summary>
    /// 授权方的 app_id。服务商调用场景下使用。
    /// 示例：2014072300007148
    /// </summary>
    public string? AuthAppId { get; set; }

    /// <summary>
    /// 商户订单号。
    /// 示例：6823789339978248
    /// </summary>
    public string? OutTradeNo { get; set; }

    /// <summary>
    /// 商家业务号。退款通知中返回退款申请流水号。
    /// 示例：HZRF001
    /// </summary>
    public string? OutBizNo { get; set; }

    /// <summary>
    /// 买家支付宝用户号。
    /// 示例：-
    /// </summary>
    public string? BuyerId { get; set; }

    /// <summary>
    /// 买家支付宝用户号。买家支付宝账号对应的支付宝唯一用户号。新商户建议使用open_id替代该字段。对于新商户，user_id字段未来计划逐步回收，存量商户可继续使用。如使用open_id，请确认 应用-开发配置-openid配置管理 已启用。无该配置项，可查看openid配置申请。
    /// 示例：180****0062
    /// </summary>
    public string? BuyerOpenId { get; set; }
    
    /// <summary>
    /// 买家支付宝账号。
    /// 示例：180****0062
    /// </summary>
    public string? BuyerLogonId { get; set; }

    /// <summary>
    /// 卖家支付宝用户号。
    /// 示例：2088101106499364
    /// </summary>
    public string? SellerId { get; set; }

    /// <summary>
    /// 卖家支付宝账号。
    /// 示例：zhuzhanghu@alitest.com
    /// </summary>
    public string? SellerEmail { get; set; }

    /// <summary>
    /// 交易状态。
    /// 示例：TRADE_CLOSED(交易关闭),TRADE_FINISHED(交易完结),TRADE_SUCCESS(交易成功),WAIT_BUYER_PAY(等待买家付款)
    /// </summary>
    public string? TradeStatus { get; set; }

    /// <summary>
    /// 订单金额。单位为人民币（元）。
    /// 示例：20
    /// </summary>
    public decimal TotalAmount { get; set; }

    /// <summary>
    /// 实收金额。商家实际收到的款项，单位为人民币（元）。
    /// 示例：15
    /// </summary>
    public decimal ReceiptAmount { get; set; }

    /// <summary>
    /// 开票金额。用户支付的可开发票金额。
    /// 示例：10.00
    /// </summary>
    public decimal? InvoiceAmount { get; set; }

    /// <summary>
    /// 付款金额。用户支付的金额。
    /// 示例：13.88
    /// </summary>
    public decimal? BuyerPayAmount { get; set; }

    /// <summary>
    /// 集分宝金额。使用集分宝支付的金额。
    /// 示例：12.00
    /// </summary>
    public decimal? PointAmount { get; set; }

    /// <summary>
    /// 总退款金额。
    /// 示例：2.58
    /// </summary>
    public decimal? RefundFee { get; set; }

    /// <summary>
    /// 实际退款金额。
    /// 示例：2.08
    /// </summary>
    public decimal? SendBackFee { get; set; }

    /// <summary>
    /// 订单标题。
    /// 示例：XXX交易
    /// </summary>
    public string? Subject { get; set; }

    /// <summary>
    /// 商品描述。
    /// 示例：XXX交易内容
    /// </summary>
    public string? Body { get; set; }

    /// <summary>
    /// 交易创建时间。
    /// 格式：yyyy-MM-dd HH:mm:ss。
    /// 示例：2015-04-27 15:45:57
    /// </summary>
    public DateTime? GmtCreate { get; set; }

    /// <summary>
    /// 交易付款时间。
    /// 格式：yyyy-MM-dd HH:mm:ss。
    /// 示例：2015-04-27 15:45:57
    /// </summary>
    public DateTime? GmtPayment { get; set; }

    /// <summary>
    /// 交易退款时间。
    /// 格式：yyyy-MM-dd HH:mm:ss.SS。
    /// 示例：2015-04-28 15:45:57.320
    /// </summary>
    public DateTime? GmtRefund { get; set; }

    /// <summary>
    /// 交易结束时间。
    /// 格式：yyyy-MM-dd HH:mm:ss。
    /// 示例：2015-04-29 15:45:57
    /// </summary>
    public DateTime? GmtClose { get; set; }

    /// <summary>
    /// 支付金额信息。支付成功的各个渠道金额信息。
    /// 示例：[{"amount":"15.00", "fundChannel":"ALIPAYACCOUNT"}]
    /// </summary>
    public string? FundBillList { get; set; }

    /// <summary>
    /// 优惠券信息。本交易支付时使用的所有优惠券信息。
    /// 示例：[{"amount":"0.20", "type":"ALIPAY_BIZ_VOUCHER"}]
    /// </summary>
    public string? VoucherDetailList { get; set; }

    /// <summary>
    /// 账期结算标识。指已完成支付的订单会进行账期管控，不会实时结算。
    /// 示例：PERIOD
    /// </summary>
    public string? BizSettleMode { get; set; }
}